<?php
    function executar($acao, $conn) {
    	if (file_exists(FILE_PATH . 'control\\controle' . $acao . '.php')) {
    		require(FILE_PATH . 'control\\controle' . $acao . '.php');
    	}
		else {
			redireciona('404');
		}
    }
	
	function exibir($pagina, $postAntigo=null) {
		require(FILE_PATH . 'view\\vistacabecalho.php');
		
		if ($pagina == 'principal' || $pagina == 'cadastro' || $pagina == 'contato')
			require(FILE_PATH . 'view\\menus\\menuexterno.php');
		else
			require(FILE_PATH . 'view\\menus\\menuinterno.php');
    	require(FILE_PATH . 'view\\vista' . $pagina . '.php');
		require(FILE_PATH . 'view\\vistarodape.php');
    }
	
	function escreveLink($parametros){
		$link	=	LINK_PATH;
		if (!is_array($parametros)) {
			$parametros	=	explode('/', $parametros);
		}
		foreach($parametros as $parametro){
			if ($parametro != '') {
				$link 	.=	$parametro . '/';
			}
		}
		return $link;
	}
	
	function redireciona($parametros, $tipo='interno'){
		if($tipo == 'interno'){
			$pagina	=	escreveLink($parametros);
		}
		else{
			$pagina	=	$parametros;
		}
		header('Location: ' . $pagina);
	}
	
	function imprimir($constante, $variaveis=null) {
		if (defined($constante)) {
			if ($variaveis == null) {
				echo (constant($constante));
			}
			else {
				$string 		=	constant($constante);
				$stringVetor	=	explode('||', $string);
				$stringFinal	=	"";
				
				if((sizeof($stringVetor) > 1) &&(sizeof($stringVetor) == sizeof($variaveis) + 1)) {
					foreach ($stringVetor as $i => $pedacoString) {
						$stringFinal	.=	isset($variaveis[$i]) ? $pedacoString . $variaveis[$i] : $pedacoString;
					}
					echo ($stringFinal);
				}
				else {
					echo ("Faltam argumentos: " . $constante);
				}
			}
		}
		else
			echo("Definir: " . $constante);
	}
	
	
	/**
	 * Verifica se o argumento $numero e um numero e se o tamanho do mesmo e '>=', '<=', ou '=='[default] a $tamanho. Se nenhum tamanho foi passado, essa verificacao nao e feita.
	 * @return bool
	 * @param int $numero
	 * @param int[optional] $tamanho
	 * @param string[optional] $comparacao Pode assumir os valores '='[default], '<=' ou '>='. 
	 */

	function validaNumero($numero, $tamanho=false, $comparacao='='){
		if ($tamanho){
			if ($comparacao	==	'<='){
				if(!(strlen($numero) <= $tamanho)){
					return false;
				}
			}
			else{
				if($comparacao	==	'>='){
					if(!(strlen($numero) >= $tamanho)){
						return false;
					}
				}
				else{
					if(!(strlen($numero) == $tamanho)){
						return false;
					}
				}
			}
		}
		if(is_numeric($numero) && $numero >= 0){
			return true;
		}
		else{
			return false;
		}
	}
	
	/**
	 * Verifica se uma data e valida
	 * @return bool
	 * @param int $dia
	 * @param int $mes
	 * @param int $ano
	 */
	function validaData($dia, $mes, $ano){
		if (validaAno($ano) && validaMes($mes) && validaDia($dia)){
			if ($mes == 2){
				if ($ano%100 == 0){
					$ano = $ano/100;
				}
				if ($ano%4 == 0){
					if ($dia <= 29){
						return true;
					}
					else{
						return false;
					}
				}
				else{
					if ($dia <= 28){
						return true;
					}
					else{
						return false;
					}
				}
				
			}
			elseif($mes == 1 || $mes == 3 || $mes == 5 || $mes == 7 || $mes == 8 || $mes == 10 || $mes == 12 ){
					return true;
			}
			else{
				if ($dia <= 30){
					return true;
				}
				else{
					return false;
				}
			}
		}
		else{
			return false;
		}
	}
	
	/**
	 * Valida uma data em formato String.
	 * @return bool
	 * @param string $data
	 */
	function validaDataString($data) {
		$data	=	explode('-', $data);
		if (sizeof($data) != 3) {
			return false;
		}
		return validaData($data[2], $data[1], $data[0]);
	}
	
	/**
	 * Verifica se o ano é um número entre 1900 e 2100.
	 * @return bool
	 * @param int $ano
	 */
	function validaAno($ano) {
		if(validaNumero($ano, 4)){
			if ($ano >= 1900 && $ano <= 2100){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	/**
	 * Verifica se o mes é um número entre 1 e 12
	 * @return bool
	 * @param int $mes
	 */
	function validaMes($mes) {
		if (validaNumero($mes, 2, '<=')){
			if ($mes >= 1 && $mes <= 12){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	/**
	 * Verifica se o dia e um numero entre 1 e 31.
	 * @return bool
	 * @param int $dia
	 */
	function validaDia($dia) {
		if (validaNumero($dia, 2, '<=')){
			if ($dia >=1 && $dia <=31){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	
	/**
     * Verifica se uma determinada string possui SOMENTE valores alfabeticos (de a a z e de A a Z) ou espacos e se seu tamanho e menor ou igual ao limite passado. Se nenhum limite for passado, nao verifica o tamanho da string.
     * @return bool
     * @param string $string String que sera avaliada.
     * @param int $limite[optional] Tamanho limite da string.
     */
    function validaAlfabetico($string, $limite=false) {
       
        /*
         * Expressao regular de valores alfabeticos.
         */
        $listaValores    =    "/^[a-zA-ZáàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ]+[a-zA-Z áàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ]*$/";
       
        if (!$limite) {
            if (preg_match($listaValores, $string)) {
                return    true;
            }
            else {
                return    false;
            }
        }
        else {
            if (strlen($string) <= $limite) {
                if (preg_match($listaValores, $string)) {
                    return    true;
                }
                else {
                    return    false;
                }
            }
            else {
                return    false;
            }
        }
    }
   
    /**
     * Verifica se uma determinada string possui valores alfanumericos (de a a z e de A a Z e numeros) ou espacos, virgulas, pontos, dois pontos, tracos, parenteses, interrogacoes, exclamacoes ou underscores e se seu tamanho e menor ou igual ao limite passado. Se nenhum limite for passado, nao verifica o tamanho da string.
     * @return bool
     * @param string $string String que sera avaliada.
     * @param int $limite[optional] Tamanho limite da string.
     */
    function validaAlfaNumerico($string, $limite=false) {
       
        /*
         * Expressao regular de valores alfa-numericos.
         */
        $listaValores    =    "/^[a-zA-Z áàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ\d\,\.\:\-\(\)\?\!_\/\r\n]+$/";
       
        if (!$limite) {
            if (preg_match($listaValores, $string)) {
                return    true;
            }
            else {
                return    false;
            }
        }
        else {
            if (strlen($string) <= $limite) {
                if (preg_match($listaValores, $string)) {
                    return    true;
                }
                else {
                    return    false;
                }
            }
            else {
                return    false;;
            }
        }
	}
	
	
	/**
	 * Verifica se o e-mail é da forma email@email[.com]*
	 * @return bool
	 * @param string $email
	 */
	function validaEmail($email) {
		$listaValores	=	'/^[a-zA-Z1-9_\-\.]{3,}@[a-zA-Z1-9_\-]+(\.[a-zA-Z1-9_\-]+)+$/';
		if (strlen($email)	<=	200){
			return preg_match($listaValores, $email);
		}
		else{
			return false;
		}
		
	}
	
	/**
	 * Verififica se o nome do arquivo da foto e valido e se a extensao dos arquivos de foto e jpg, jpeg, gif, png ou bmp.
	 * @return bool
	 * @param string $nomeArquivo
	 */
	function validaFoto($nomeArquivo){
		$listaValores    =    "/^[a-zA-ZáàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ\d\.\-_ ]+\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)$/";
		
		return preg_match($listaValores, $nomeArquivo);
	}
	
	/**
	 * Verifica se a Senha não contem nenhum aspas(") ou plique(') e se tem pelo menos 4 caracteres.
	 * @return bool
	 * @param string $senha
	 */
	function validaSenha($senha){
		$listaValores	=	"/^[^\"']{4,}$/";

		if(strlen($senha) <= 20){
			return preg_match($listaValores, $senha);
		}
		else{
			return false;
		}
	}
	
	function getTiposUsuarios () {
		return array('administrador', 'novo', 'diretor', 'pesquisador', 'bolsista');
	}
?>